package com.hns.tool.export.pdf;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * PDF默认分页事件
 * @author:Fisher
 * @email:zhuangcaijin@126.com
 * @version Revision 2.0.0
 */
public class PageEventDefault extends PdfPageEventHelper {
	/** 
	 * 模板 
	 */
	protected PdfTemplate tpl;
	
	/**
	 * 默认字体
	 */
	protected BaseFont bf;

	/** 
	 * 普通字体 
	 */
	protected Font font;

	/** 
	 * 标题字体 
	 */
	protected Font titleFont;

	/** 
	 * 标题 
	 */
	protected String title;

	/**
	 * 重写onOpenDocument方法,初始化模板和字体
	 * @author:Fisher
	 * @email:zhuangcaijin@126.com
	 */
	@Override
	public void onOpenDocument(PdfWriter pdfwriter, Document document) {
		try {
			tpl = pdfwriter.getDirectContent().createTemplate(21, 14);
			bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			font = new Font(bf, 10, Font.NORMAL);
		} catch (Exception e) {
			throw new ExceptionConverter(e);
		}
	}

	/**
	 * 重写onEndPage方法 设置pdf表格格式
	 * @author:Fisher
	 * @email:zhuangcaijin@126.com
	 */
	@Override
	public void onEndPage(PdfWriter writer, Document document) {
		//
		// PdfContentByte cb = writer.getDirectContent();
		// cb.saveState();
		//
		// cb.beginText();
		//
		// cb.setFontAndSize(bf, 10);
		//
		// // Header
		// float x = document.top(-20);

		// // 左
		// cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "H-Left",
		// document.left(), x, 0);
		// // 中
		// cb.showTextAligned(PdfContentByte.ALIGN_CENTER,
		// writer.getPageNumber() + " page", (document.right() +
		// document.left()) / 2, x, 0);
		// 右
		// cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "第" +
		// writer.getPageNumber() + "页", document.right(), x, 0);

		// Footer
		// float y = document.bottom(-20);

		// 页脚
		// // 左
		// cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "F-Left",
		// document.left(), y, 0);
		// // 中
		// cb.showTextAligned(PdfContentByte.ALIGN_CENTER,
		// writer.getPageNumber() + " page", (document.right() +
		// document.left()) / 2, y, 0);
		// // 右
		// cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "F-Right",
		// document.right(), y, 0);

		// cb.endText();
		//
		// cb.restoreState();

		// 标题字体
		titleFont = new Font(bf, 20, Font.BOLD);

		PdfPTable table = new PdfPTable(3);
		try {
			table.setWidths(new int[] { 24, 24, 2 });
			table.setTotalWidth(527);
			table.setLockedWidth(true);

			PdfPCell h2 = new PdfPCell(new Paragraph(title, titleFont));
			h2.setBorder(0);
			// h2.setPaddingTop(30f);
			h2.setHorizontalAlignment(Element.ALIGN_CENTER);
			h2.setColspan(3);
			table.addCell(h2);
			// table.setSpacingAfter(20f);

			table.getDefaultCell().setFixedHeight(20);// 固定高度
			table.getDefaultCell().setBorder(0);
			table.addCell("test");

			table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
			table.addCell(new Paragraph(String.format("第 %d 页 共", writer.getPageNumber()), font));
			PdfPCell cell = new PdfPCell(Image.getInstance(tpl));
			cell.setBorder(0);
			table.addCell(cell);
			table.writeSelectedRows(0, -1, 34, 790, writer.getDirectContent());// 写入行
		} catch (DocumentException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 重写onCloseDocument获取总页数,并设置总页数显示位置
	 * @author:Fisher
	 * @email:zhuangcaijin@126.com
	 */
	@Override
	public void onCloseDocument(PdfWriter pdfwriter, Document document) {// 关闭document的时候获取总页数，并把总页数按模版写道之前预留的位置
		ColumnText.showTextAligned(tpl, Element.ALIGN_LEFT, new Phrase(String.valueOf(pdfwriter.getPageNumber() - 1) + "页", font), 2, 2, 0);
	}

	/**
	 * 设置标题
	 * @param title 标题
	 * @return
	 * @author:Fisher
	 * @email:zhuangcaijin@126.com
	 */
	public PageEventDefault setTitle(String title) {
		this.title = title;
		return this;
	}

}
